/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package dao;

import static dao.FuncionarioDAO.abreConexao;
import java.util.ArrayList;
import java.util.List;
import model.Funcionario;
import org.hibernate.Criteria;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.junit.AfterClass;
import org.junit.BeforeClass;
import util.HibernateUtil;

/**
 *
 * @author Adriano
 */
public class FuncionarioDAO {

    private static Session session;
    private static Transaction transaction;

    @BeforeClass
    public static void abreConexao() {
        session = HibernateUtil.getSessionFactory().getCurrentSession();
        transaction = session.beginTransaction();
    }

    @AfterClass
    public void fechaConexao() {
        try {
            transaction.commit();
        } catch (Throwable e) {
            System.out.println("problema no commit" + e.getMessage());
        } finally {
            try {
                if (session.isOpen()) {
                    session.close();
                }
            } catch (Exception e) {
                System.out.println("problema ao fachar conexao" + e.getMessage());
            }
        }
    }

    public ArrayList<Funcionario> getListaFuncionario() {
        String sql = "from Funcionario";
        abreConexao();
        Query consulta = session.createQuery(sql);

        ArrayList<Funcionario> listaFuncionarios = (ArrayList<Funcionario>) consulta.list();

        fechaConexao();

        return listaFuncionarios;

    }

    public List<Funcionario> getListaFuncionarios() {
        abreConexao();
        Criteria lista = session.createCriteria(Funcionario.class);
        List<Funcionario> listaFuncionarios = lista.list();
        fechaConexao();
        return listaFuncionarios;
    }

    public boolean adicionaFuncionario(Funcionario funcionario) {
        abreConexao();
        try {
            session.save(funcionario);
            return true;
        } catch (Exception e) {
            System.out.println("Erro ao adicionar funcionario! - " + e.getMessage());
            return false;
        } finally {
            fechaConexao();
        }
    }

    public Funcionario getFuncionario(String matricula) {
        String sql = "from Funcionario funcionario WHERE funcionario.matricula = :matricula";
        abreConexao();
        Query consulta = session.createQuery(sql);
        consulta.setString("matricula", matricula);

        Funcionario funcionarioPesquisado = (Funcionario) consulta.uniqueResult();

        fechaConexao();

        return funcionarioPesquisado;
    }

    public boolean verificaLogin(String matricula, String senha) {
        String sql = "from Funcionario funcionario WHERE funcionario.matricula = :matricula AND funcionario.senha =:senha";
        abreConexao();
        Query consulta = session.createQuery(sql);
        consulta.setString("matricula", matricula);
        consulta.setString("senha", senha);

        Funcionario funcionarioPesquisado = (Funcionario) consulta.uniqueResult();

        fechaConexao();

        if(funcionarioPesquisado != null){
            return true;
        } else {
        }
        return false;
    }
}
